/**
 * 配置管理模块
 * 用于存储和管理 API 密钥和模型配置
 */
const fs = require('fs');
const path = require('path');

// 配置文件路径
const CONFIG_FILE = path.join(__dirname, '../data/config.json');

// 默认配置
const DEFAULT_CONFIG = {
  alibaba_cloud_access_key_secret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET || '',
  bailian_api_endpoint: process.env.BAILIAN_API_ENDPOINT || 'https://bailian.aliyuncs.com',
  bailian_model_id: process.env.BAILIAN_MODEL_ID || 'qwen-max',
  use_openai_client: true, // 使用 OpenAI 客户端
  use_official_api: true, // 是否使用官方 DashScope 兼容模式 API
  last_updated: new Date().toISOString()
};

// 确保配置目录存在
function ensureConfigDir() {
  const configDir = path.dirname(CONFIG_FILE);
  if (!fs.existsSync(configDir)) {
    fs.mkdirSync(configDir, { recursive: true });
  }
}

/**
 * 加载配置
 * @returns {Object} 配置对象
 */
function loadConfig() {
  try {
    ensureConfigDir();

    // 如果配置文件不存在，创建默认配置
    if (!fs.existsSync(CONFIG_FILE)) {
      saveConfig(DEFAULT_CONFIG);
      return { ...DEFAULT_CONFIG };
    }

    // 读取配置文件
    const configData = fs.readFileSync(CONFIG_FILE, 'utf8');
    return JSON.parse(configData);
  } catch (error) {
    console.error('Error loading config:', error);
    return { ...DEFAULT_CONFIG };
  }
}

/**
 * 保存配置
 * @param {Object} config 配置对象
 * @returns {boolean} 是否保存成功
 */
function saveConfig(config) {
  try {
    ensureConfigDir();

    // 添加更新时间
    const configToSave = {
      ...config,
      last_updated: new Date().toISOString()
    };

    // 写入配置文件
    fs.writeFileSync(CONFIG_FILE, JSON.stringify(configToSave, null, 2), 'utf8');

    // 更新环境变量
    process.env.ALIBABA_CLOUD_ACCESS_KEY_ID = config.alibaba_cloud_access_key_id;
    process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET = config.alibaba_cloud_access_key_secret;
    process.env.BAILIAN_API_ENDPOINT = config.bailian_api_endpoint;
    process.env.BAILIAN_MODEL_ID = config.bailian_model_id;

    return true;
  } catch (error) {
    console.error('Error saving config:', error);
    return false;
  }
}

/**
 * 获取当前配置
 * @returns {Object} 配置对象
 */
function getConfig() {
  return loadConfig();
}

/**
 * 更新配置
 * @param {Object} newConfig 新的配置对象
 * @returns {Object} 更新后的配置对象
 */
function updateConfig(newConfig) {
  const currentConfig = loadConfig();

  // 合并配置
  const updatedConfig = {
    ...currentConfig,
    ...newConfig
  };

  // 保存配置
  saveConfig(updatedConfig);

  return updatedConfig;
}

// 初始化配置
loadConfig();

module.exports = {
  getConfig,
  updateConfig
};
